<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en-US">
<head>
<!-- GenHTML revision 25226-->
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Developing Embeddable Enterprise Bean Applications - The Java EE 6 Tutorial</title>
<meta name="robots" content="index,follow">
<meta name="robots" content="index,follow">
<meta name="date" content="2011-03-01">
<link rel="stylesheet" type="text/css" href="css/default.css">
<link rel="stylesheet" type="text/css" href="css/ipg.css">
<link rel="stylesheet" type="text/css" href="css/javaeetutorial.css">
</head>

<body>

<table border="0" cellpadding="5" cellspacing="0" width="100%">
<tbody>
   <tr valign="top">
      <td width="400px"><p class="toc level1"><a href="docinfo.html">Document Information</a></p>
<p class="toc level1 tocsp"><a href="gexaf.html">Preface</a></p>
<p class="toc level1 tocsp"><a href="gfirp.html">Part&nbsp;I&nbsp;Introduction</a></p>
<p class="toc level2"><a href="bnaaw.html">1.&nbsp;&nbsp;Overview</a></p>
<p class="toc level2"><a href="gfiud.html">2.&nbsp;&nbsp;Using the Tutorial Examples</a></p>
<p class="toc level1 tocsp"><a href="bnadp.html">Part&nbsp;II&nbsp;The Web Tier</a></p>
<p class="toc level2"><a href="bnadr.html">3.&nbsp;&nbsp;Getting Started with Web Applications</a></p>
<p class="toc level2"><a href="bnaph.html">4.&nbsp;&nbsp;JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="giepx.html">5.&nbsp;&nbsp;Introduction to Facelets</a></p>
<p class="toc level2"><a href="gjddd.html">6.&nbsp;&nbsp;Expression Language</a></p>
<p class="toc level2"><a href="bnaqz.html">7.&nbsp;&nbsp;Using JavaServer Faces Technology in Web Pages</a></p>
<p class="toc level2"><a href="gjcut.html">8.&nbsp;&nbsp;Using Converters, Listeners, and Validators</a></p>
<p class="toc level2"><a href="bnatx.html">9.&nbsp;&nbsp;Developing with JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="gkmaa.html">10.&nbsp;&nbsp;JavaServer Faces Technology Advanced Concepts</a></p>
<p class="toc level2"><a href="bnawo.html">11.&nbsp;&nbsp;Configuring JavaServer Faces Applications</a></p>
<p class="toc level2"><a href="gkiow.html">12.&nbsp;&nbsp;Using Ajax with JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="gkhxa.html">13.&nbsp;&nbsp;Advanced Composite Components</a></p>
<p class="toc level2"><a href="bnavg.html">14.&nbsp;&nbsp;Creating Custom UI Components</a></p>
<p class="toc level2"><a href="bnafd.html">15.&nbsp;&nbsp;Java Servlet Technology</a></p>
<p class="toc level2"><a href="bnaxu.html">16.&nbsp;&nbsp;Internationalizing and Localizing Web Applications</a></p>
<p class="toc level1 tocsp"><a href="bnayk.html">Part&nbsp;III&nbsp;Web Services</a></p>
<p class="toc level2"><a href="gijti.html">17.&nbsp;&nbsp;Introduction to Web Services</a></p>
<p class="toc level2"><a href="bnayl.html">18.&nbsp;&nbsp;Building Web Services with JAX-WS</a></p>
<p class="toc level2"><a href="giepu.html">19.&nbsp;&nbsp;Building RESTful Web Services with JAX-RS</a></p>
<p class="toc level2"><a href="gjjxe.html">20.&nbsp;&nbsp;Advanced JAX-RS Features</a></p>
<p class="toc level2"><a href="gkojl.html">21.&nbsp;&nbsp;Running the Advanced JAX-RS Example Application</a></p>
<p class="toc level1 tocsp"><a href="bnblr.html">Part&nbsp;IV&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="gijsz.html">22.&nbsp;&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="gijre.html">23.&nbsp;&nbsp;Getting Started with Enterprise Beans</a></p>
<p class="toc level2"><a href="gijrb.html">24.&nbsp;&nbsp;Running the Enterprise Bean Examples</a></p>
<p class="toc level2"><a href="bnbpk.html">25.&nbsp;&nbsp;A Message-Driven Bean Example</a></p>
<p class="toc level2"><a href="gkcqz.html">26.&nbsp;&nbsp;Using the Embedded Enterprise Bean Container</a></p>
<p class="toc level3"><a href="gkfae.html">Overview of the Embedded Enterprise Bean Container</a></p>
<div id="scrolltoc" class="onpage">
<p class="toc level3"><a href="">Developing Embeddable Enterprise Bean Applications</a></p>
<p class="toc level4"><a href="#gkcqi">Running Embedded Applications</a></p>
<p class="toc level4"><a href="#gkcov">Creating the Enterprise Bean Container</a></p>
<p class="toc level5"><a href="#gkcrp">Explicitly Specifying Enterprise Bean Modules to be Initialized</a></p>
<p class="toc level4 tocsp"><a href="#glhur">Looking Up Session Bean References</a></p>
<p class="toc level4"><a href="#gkcre">Shutting Down the Enterprise Bean Container</a></p>
</div>
<p class="toc level3 tocsp"><a href="gkcpv.html">The <tt>standalone</tt> Example Application</a></p>
<p class="toc level4"><a href="gkcpv.html#gkcqp">Running the <tt>standalone</tt> Example Application</a></p>
<p class="toc level2 tocsp"><a href="gkidz.html">27.&nbsp;&nbsp;Using Asynchronous Method Invocation in Session Beans</a></p>
<p class="toc level1 tocsp"><a href="gjbnr.html">Part&nbsp;V&nbsp;Contexts and Dependency Injection for the Java EE Platform</a></p>
<p class="toc level2"><a href="giwhb.html">28.&nbsp;&nbsp;Introduction to Contexts and Dependency Injection for the Java EE Platform</a></p>
<p class="toc level2"><a href="gjbls.html">29.&nbsp;&nbsp;Running the Basic Contexts and Dependency Injection Examples</a></p>
<p class="toc level2"><a href="gjehi.html">30.&nbsp;&nbsp;Contexts and Dependency Injection for the Java EE Platform: Advanced Topics</a></p>
<p class="toc level2"><a href="gkhre.html">31.&nbsp;&nbsp;Running the Advanced Contexts and Dependency Injection Examples</a></p>
<p class="toc level1 tocsp"><a href="bnbpy.html">Part&nbsp;VI&nbsp;Persistence</a></p>
<p class="toc level2"><a href="bnbpz.html">32.&nbsp;&nbsp;Introduction to the Java Persistence API</a></p>
<p class="toc level2"><a href="gijst.html">33.&nbsp;&nbsp;Running the Persistence Examples</a></p>
<p class="toc level2"><a href="bnbtg.html">34.&nbsp;&nbsp;The Java Persistence Query Language</a></p>
<p class="toc level2"><a href="gjitv.html">35.&nbsp;&nbsp;Using the Criteria API to Create Queries</a></p>
<p class="toc level2"><a href="gkjiq.html">36.&nbsp;&nbsp;Creating and Using String-Based Criteria Queries</a></p>
<p class="toc level2"><a href="gkjjf.html">37.&nbsp;&nbsp;Controlling Concurrent Access to Entity Data with Locking</a></p>
<p class="toc level2"><a href="gkjia.html">38.&nbsp;&nbsp;Improving the Performance of Java Persistence API Applications By Setting a Second-Level Cache</a></p>
<p class="toc level1 tocsp"><a href="gijrp.html">Part&nbsp;VII&nbsp;Security</a></p>
<p class="toc level2"><a href="bnbwj.html">39.&nbsp;&nbsp;Introduction to Security in the Java EE Platform</a></p>
<p class="toc level2"><a href="bncas.html">40.&nbsp;&nbsp;Getting Started Securing Web Applications</a></p>
<p class="toc level2"><a href="bnbyk.html">41.&nbsp;&nbsp;Getting Started Securing Enterprise Applications</a></p>
<p class="toc level1 tocsp"><a href="gijue.html">Part&nbsp;VIII&nbsp;Java EE Supporting Technologies</a></p>
<p class="toc level2"><a href="gijto.html">42.&nbsp;&nbsp;Introduction to Java EE Supporting Technologies</a></p>
<p class="toc level2"><a href="bncih.html">43.&nbsp;&nbsp;Transactions</a></p>
<p class="toc level2"><a href="bncjh.html">44.&nbsp;&nbsp;Resource Connections</a></p>
<p class="toc level2"><a href="bncdq.html">45.&nbsp;&nbsp;Java Message Service Concepts</a></p>
<p class="toc level2"><a href="bncgv.html">46.&nbsp;&nbsp;Java Message Service Examples</a></p>
<p class="toc level2"><a href="gkahp.html">47.&nbsp;&nbsp;Advanced Bean Validation Concepts and Examples</a></p>
<p class="toc level2"><a href="gkeed.html">48.&nbsp;&nbsp;Using Java EE Interceptors</a></p>
<p class="toc level1 tocsp"><a href="gkgjw.html">Part&nbsp;IX&nbsp;Case Studies</a></p>
<p class="toc level2"><a href="gkaee.html">49.&nbsp;&nbsp;Duke's Tutoring Case Study Example</a></p>
<p class="toc level1 tocsp"><a href="idx-1.html">Index</a></p>
</td>
      <td width="10px">&nbsp;</td>
      <td>
         <div class="header">
             <div class="banner">
                <table width="100%" border="0" cellpadding="5" cellspacing="0">
                   <tbody>
                      <tr>
                         <td valign="bottom"><p class="Banner">The Java EE 6 Tutorial
</p></td>
                         <td align="right"  valign="bottom"><img src="graphics/javalogo.png" alt="Java Coffee Cup logo"></td>
                      </tr>
                   </tbody>
                </table>
             </div>

             <div class="header-links">
	         <a href="./index.html">Home</a> | 
<a href="../information/download.html">Download</a> | 
<a href="./javaeetutorial6.pdf">PDF</a> | 
<a href="../information/faq.html">FAQ</a> | 
<a href="http://download.oracle.com/javaee/feedback.htm">Feedback</a>

             </div>
             <div class="navigation">
                 <a href="gkfae.html"><img src="graphics/leftButton.gif" border="0" alt="Previous" title="Previous"></a>
                 <a href="p1.html"><img src="graphics/upButton.gif" border="0" alt="Contents" title="Contents"></a>
                 <a href="gkcpv.html"><img src="graphics/rightButton.gif" border="0" alt="Next" title="Next"></a>
             </div>
         </div>

	 <div class="maincontent">      	 
             

<a name="gkcrr"></a><h2>Developing Embeddable Enterprise Bean Applications</h2>
<p><a name="indexterm-1498"></a>All embeddable enterprise bean containers support the features listed in <a href="#gkcqc">Table&nbsp;26-1</a>.</p>

<a name="gkcqc"></a><p class="caption">Table&nbsp;26-1 Required Enterprise Bean Features in the Embeddable Container</p><table><col width="50%"><col width="50%"><tr><th align="left" valign="top" scope="column"><p>Enterprise Bean Feature</p>

</th>
<th align="left" valign="top" scope="column"><p>Description</p>

</th>
</tr>
<tr><td align="left" valign="top" scope="row"><p>Local
session beans</p>

</td>
<td align="left" valign="top" scope="row"><p>Local and no-interface view stateless, stateful, and singleton session beans. All method
access is synchronous. Session beans must not be web service endpoints.</p>

</td>
</tr>
<tr><td align="left" valign="top" scope="row"><p>Transactions</p>

</td>
<td align="left" valign="top" scope="row"><p>Container-managed and bean-managed
transactions.</p>

</td>
</tr>
<tr><td align="left" valign="top" scope="row"><p>Security</p>

</td>
<td align="left" valign="top" scope="row"><p>Declarative and programmatic security.</p>

</td>
</tr>
<tr><td align="left" valign="top" scope="row"><p>Interceptors</p>

</td>
<td align="left" valign="top" scope="row"><p>Class-level and method-level interceptors for session beans.</p>

</td>
</tr>
<tr><td align="left" valign="top" scope="row"><p>Deployment descriptor</p>

</td>
<td align="left" valign="top" scope="row"><p>The optional
<tt>ejb-jar.xml</tt> deployment descriptor, with the same overriding rules for the enterprise bean container
in Java EE servers.</p>

</td>
</tr>
</table><p>Container providers are allowed to support the full set of features in enterprise
beans, but applications that use the embedded container will not be portable if
they use enterprise bean features not listed in <a href="#gkcqc">Table&nbsp;26-1</a>, such as the
timer service, session beans as web service endpoints, or remote business interfaces.</p>



<a name="gkcqi"></a><h3>Running Embedded Applications</h3>
<a name="indexterm-1499"></a><p>The embedded container, the enterprise bean components, and the client all are executed
in the same virtual machine using the same classpath. As a result, developers
can run an application that uses the embedded container just like a typical
Java SE application as follows:</p>

<pre>java -classpath mySessionBean.jar:containerProviderRuntime.jar:myClient.jar 
com.example.ejb.client.Main</pre><p>In the above example, <tt>mySessionBean.jar</tt> is an EJB JAR containing a local stateless
session bean, <tt>containerProviderRuntime.jar</tt> is a JAR file supplied by the enterprise bean
provider that contains the needed runtime classes for the embedded container, and <tt>myClient.jar</tt>
is a JAR file containing a Java  SE application that calls the
business methods in the session bean through the embedded container.</p>



<a name="gkcov"></a><h3>Creating the Enterprise Bean Container</h3>
<a name="indexterm-1500"></a><p>The <tt>javax.ejb.embedded.EJBContainer</tt> abstract class represents an instance of the enterprise bean container and
includes factory methods for creating a container instance. The <tt>EJBContainer.createEJBContainer</tt> method is used
to create and initialize an embedded container instance.</p>

<p>The following code snippet shows how to create an embedded container that is
initialized with the container provider's default settings:</p>

<pre>EJBContainer ec = EJBContainer.createEJBContainer();</pre><p>By default, the embedded container will search the virtual machine classpath for enterprise
bean modules: directories containing a <tt>META-INF/ejb-jar.xml</tt> deployment descriptor, directories containing a class
file with one of the enterprise bean component annotations (such as <tt>@Stateless</tt>), or JAR
files containing an <tt>ejb-jar.xml</tt> deployment descriptor or class file with an enterprise bean
annotation. Any matching entries are considered enterprise bean modules within the same application.
Once all the valid enterprise bean modules have been found in the classpath,
the container will begin initializing the modules. When the <tt>createEJBContainer</tt> method successfully returns, the
client application can obtain references to the client view of any enterprise bean
module found by the embedded container.</p>

<p>An alternate version of the <tt>EJBContainer.createEJBContainer</tt> method takes a <tt>Map</tt> of properties and
settings for customizing the embeddable container instance:</p>

<pre>Properties props = new Properties();
props.setProperty(...);
...
EJBContainer ec = EJBContainer.createEJBContainer(props);</pre>

<a name="gkcrp"></a><h4>Explicitly Specifying Enterprise Bean Modules to be Initialized</h4>
<a name="indexterm-1501"></a><p>Developers can specify exactly which enterprise bean modules the embedded container will initialize.
To explicitly specify the enterprise bean modules initialized by the embedded container, set
the <tt>EJBContainer.MODULES</tt> property.</p>

<p>The modules may be located either in the virtual machine classpath in which
the embedded container and client code run, or alternately outside the virtual machine
classpath.</p>

<p>To specify modules in the virtual machine classpath, set <tt>EJBContainer.MODULES</tt> to a
<tt>String</tt> to specify a single module name, or a <tt>String</tt> array containing the
module names. The embedded container searches the virtual machine classpath for enterprise bean modules
matching the specified names.</p>

<pre>Properties props = new Properties();
props.setProperty(EJBContainer.MODULES, "mySessionBean");
EJBContainer ec = EJBContainer.createEJBContainer(props);</pre><p>To specify enterprise bean modules outside the virtual machine classpath, set <tt>EJBContainer.MODULES</tt> to
a <tt>java.io.File</tt> object or an array of <tt>File</tt> objects. Each <tt>File</tt> object refers to
an EJB JAR file, or a directory containing an expanded EJB JAR.</p>

<pre>Properties props = new Properties();
File ejbJarFile = new File(...);
props.setProperty(EJBContainer.MODULES, ejbJarFile);
EJBContainer ec = EJBContainer.createEJBContainer(props);</pre>

<a name="glhur"></a><h3>Looking Up Session Bean References</h3>
<a name="indexterm-1502"></a><a name="indexterm-1503"></a><p>To look up session bean references in an application using the embedded container,
use an instance of <tt>EJBContainer</tt> to retrieve a <tt>javax.naming.Context</tt> object. Call the <tt>EJBContainer.getContext</tt>
method to retrieve the <tt>Context</tt> object.</p>

<pre>EJBContainer ec = EJBContainer.createEJBContainer();
Context ctx = ec.getContext();</pre><p>References to session beans can then be obtained using the portable JNDI syntax
detailed in <a href="gipjf.html#girgn">Portable JNDI Syntax</a>. For example, to obtain a reference to <tt>MySessionBean</tt>, a local session
bean with a no-interface view, use the following code:</p>

<pre>MySessionBean msb = (MySessionBean) 
            ctx.lookup("java:global/mySessionBean/MySessionBean");</pre>

<a name="gkcre"></a><h3>Shutting Down the Enterprise Bean Container</h3>
<a name="indexterm-1504"></a><p>From the client, call the <tt>close</tt> method of the instance of <tt>EJBContainer</tt> to
shut down the embedded container:</p>

<pre>EJBContainer ec = EJBContainer.createEJBContainer();
...
ec.close();</pre><p>While clients are not required to shut down <tt>EJBContainer</tt> instances, doing so frees
resources consumed by the embedded container. This is particularly important when the virtual
machine under which the client application is running has a longer lifetime than
the client application.</p>


         </div>
         <div class="navigation">
             <a href="gkfae.html"><img src="graphics/leftButton.gif" border="0" alt="Previous" title="Previous"></a>
             <a href="p1.html"><img src="graphics/upButton.gif" border="0" alt="Contents" title="Contents"></a>
             <a href="gkcpv.html"><img src="graphics/rightButton.gif" border="0" alt="Next" title="Next"></a>
         </div>

         <div class="copyright">
      	    <p>Copyright &copy; 2011, Oracle and/or its affiliates. All rights reserved. <a href="docinfo.html">Legal Notices</a></p>
      	 </div>

      </td>
   </tr>
</tbody>
</table>
</body>
</html>

